var edited_user_id = null;
var new_id = 0;
var tab = null;

$(function(){
	init();
	load();
});

function init()
{
	tab = $("#tabBox");
	
	$("#pmi_add a").bind("click", function(){
		edit(null);
		return false;
	});

	$("#pmi_get a").bind("click", function(){
		load();
		return false;
	});

	$("#pmi_set a").bind("click", function(){
		save();
		load();
		return false;
	});

	$("#dlgBox").dialog({
		autoOpen: false,
		height: 280,
		width: 350,
		modal: true,
		buttons: {
			"OK": function() {
				var bValid = true;
				// bValid = bValid && checkRegexp( email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. ui@jquery.com" );
				$( this ).dialog( "close" );
				
				if(edited_user_id == null)
				{
					insertRow();
				}
				else
				{
					updateRow();
				}
			},
			Cancel: function() {
				$( this ).dialog( "close" );
			}
		}
	});
}

function load()
{
	var req = new Request();
	req.addAttr("obj", "parsers").addAttr("act", "get-all");
	//var n = req.createNode("param").addAttr("obj", "users").addAttr("act", "get-all");
	//req.addNode(n);

	send(req, parseAnswer, showError);
	return false;
}

function showError(msg)
{
	alert(msg);
}

function save()
{
	var user;
	var req = new Request();
	req.addAttr("obj", "parser").addAttr("act", "save");

	try
	{
		$("tr.del", tab).each(function(){
			// новых пользователей еще нет в БД, поэтому их нет смыслаа добавлять в пакет
			if(!$(this).hasClass("ins"))
			{
				var u = row2array(this);
				req.addNode(req.createNode("client")
					.addAttr("id", u[0])
					.addAttr("dt", u[1])
					.addAttr("phone", u[2])
					.addAttr("email", u[3])
					.addAttr("acco", u[4])
					.addAttr("act", "del"));
			}
		});
		
		$("tr.ins", tab).each(function(){
			// новых пользователей еще нет в БД, поэтому их нет смыслаа добавлять в пакет
			if(!$(this).hasClass("del"))
			{
				var u = row2array(this);
				req.addNode(req.createNode("client")
					.addAttr("id", u[0])
					.addAttr("dt", u[1])
					.addAttr("phone", u[2])
					.addAttr("email", u[3])
					.addAttr("acco", u[4])
					.addAttr("act", "ins"));
			}
		});
		
		$("tr.upd", tab).each(function(){
			// добавляем в пакет как изменные только те,
			// которые не включены в него ранее
			if(!$(this).hasClass("ins") && !$(this).hasClass("del"))
			{
				var u = row2array(this);
				req.addNode(req.createNode("client")
					.addAttr("id", u[0])
					.addAttr("dt", u[1])
					.addAttr("phone", u[2])
					.addAttr("email", u[3])
					.addAttr("acco", u[4])
					.addAttr("act", "upd"));
			}
		});
	}
	catch(err)
	{
		//txt+="Error description: " + err.description + "\n\n";
		console.log(err);
	}
/*
*/
	// console.log(req.toString());
	send(req, null, showError);
	return false;
}

function row2array(row)
{
	var props = [];
	
	// var row = $("#"+ user_id, tab);
	props.push(row.id);
	props.push($(".td_dt", row).text());
	props.push($(".td_phone", row).text());
	props.push($(".td_email", row).text());
	props.push($(".td_acco", row).text());
	
	return props;
}

function send(req, callBackOk, callBackErr)
{
	console.log(req.toString());
	
	var isOk = false;
	var res = $.ajax({
		type: "POST",
		url: root + "ajax.php",
		async: true,
		data: { xml: req.toString() },
		dataType: "xml",
		error: function(ans, textStatus, errorThrown){
			// console.log(ans.responseText);
			console.log(ans.responseText);
			if(callBackErr)
				callBackErr(ans.responseText);
		},
		success: function(xml, status, resp){
			// console.log(resp.responseText);
			isOk = true;
			console.log(resp.responseText);
			if(callBackOk)
				callBackOk(resp.responseText);
		}
	});
	return isOk;
}

function clearTable()
{
	var n = $("tr", tab).length;
	for(var i = 1; i < n; i++)
		$("tr:last-child", tab).remove();
}

function parseAnswer(xml)
{
	clearTable();
	
	$("parser", xml).each(function(){
		var tr = $("tr:last-child", tab);
		var html = node2row(this);
		// console.log(html);
		$(html).insertAfter(tr);
	});
	
	$("tr:odd", tab).css("background-color", "#eee");
	
	$("a.a_upd").bind("click", function(){edit(this);});
	$("a.a_del").bind("click", deleteRow);
}

function node2row(node)
{
	return row(node.attributes["id"].value, node.attributes["sender_id"].value, node.attributes["title"].value, node.attributes["id_type"].value, node.attributes["filter"].value, node.attributes["sour"].value, node.attributes["dest"].value);
}

function row(id, sender_id, title, id_type, filter, sour, dest)
{
	var lab_id = id;
	if(id == null)
	{
		new_id++;
		id = 'n'+new_id;
		lab_id = "&nbsp;";
	}
	var tr = '<tr id="'+ id +'">';
	tr += '<td class="td_id info">' + lab_id + '</td>';
	tr += '<td class="td_title info" id="'+ sender_id +'">' + title + '</td>';

	var s = '';
	switch(id_type)
	{
		case '1':
			s = '№ счета';
			break;
		case '2':
			s = 'EMail';
			break;
		case '3':
			s = 'Телефон';
			break;
	}
	tr += '<td class="td_id_type info">' + s + '</td>';
	tr += '<td class="td_filter info">' + filter + '</td>';
	tr += '<td class="td_sour info">' + sour + '</td>';
	tr += '<td class="td_dest info">' + dest + '</td>';
	tr += '<td><a class="a_upd" href="#">изменить</a></td>';
	tr += '<td><a class="a_del" href="#">удалить</a></td>';
	tr += '</tr>';
	return tr;
}

// Форма редактирования пользователя
function edit(obj)
{
	// console.log(obj);
	
	var dlg = $("#dlgBox");
	dlg.dialog("open");

	if(obj != null)
	{
		var user_id = obj.parentNode.parentNode.id;
		// console.log(user_id);
		edited_user_id = user_id;
		
		var phone = $("#"+ user_id + " .td_phone", tab).text();
		var email = $("#"+ user_id + " .td_email", tab).text();
		var acco = $("#"+ user_id + " .td_acco", tab).text();
		
		$("#phone", dlg).val(phone);
		$("#email", dlg).val(email);
		$("#acco", dlg).val(acco);
	}
	else
	{	
		edited_user_id = null;
		
		$("#phone", dlg).val("");
		$("#email", dlg).val("");
		$("#acco", dlg).val("");
	}	
}

// вставка нового клиента
function insertRow()
{
	var dlg = $("#dlgBox");
	
	var phone = $("#phone", dlg).val();
	var email = $("#email", dlg).val();
	var acco = $("#acco", dlg).val();
	var html = row(null, dt_uni(), phone, email, acco);
	$(html).insertAfter("#tabBox tr:last-child");
	var new_tr = $("tr:last-child", tab);
	new_tr.addClass("ins");
	$("a.a_upd", new_tr).bind("click", function(){edit(this);});
	$("a.a_del", new_tr).bind("click", deleteRow);
}

// обновление существующего пользователя
function updateRow()
{
	var dlg = $("#dlgBox");
	
	var phone = $("#phone", dlg).val();
	var email = $("#email", dlg).val();
	var acco = $("#acco", dlg).val();
	
	var tr = $("#"+ edited_user_id, tab);
	tr.addClass("upd");
	$(".td_phone", tr).text(phone);
	$(".td_email", tr).text(email);
	$(".td_acco", tr).text(acco);
	// if(!tr.hasClass("upd"))
}

function deleteRow()
{
	var tr = $("#"+ this.parentNode.parentNode.id, tab);
	tr.toggleClass("del");
	if(tr.hasClass("del"))
		$(".a_del", tr).text("отмена");
	else
		$(".a_del", tr).text("удалить");
}







